import express from 'express';
import { WechatyBuilder } from 'wechaty';
import { FileBox } from 'file-box';
import qrcode from 'qrcode';

const app = express();
app.use(express.json());

// 存储bot实例和登录状态
let bot = null;
let isLoggedIn = false;
let qrCodeUrl = null;

// 初始化微信机器人
const initBot = () => {
  bot = WechatyBuilder.build({
    name: 'wechat-bot',
    puppet: 'wechaty-puppet-wechat',
  });

  // 处理扫码事件
  bot.on('scan', async (qrcode, status) => {
    qrCodeUrl = await generateQrCode(qrcode);
  });

  // 处理登录事件  
  bot.on('login', () => {
    isLoggedIn = true;
    qrCodeUrl = null;
  });

  // 处理登出事件
  bot.on('logout', () => {
    isLoggedIn = false;
  });

  return bot;
};

// API路由
// 1. 启动微信
app.post('/api/wechat/start', async (req, res) => {
  try {
    if (!bot) {
      bot = initBot();
      await bot.start();
      res.json({ success: true, message: '微信启动成功' });
    } else {
      res.json({ success: false, message: '微信已经启动' });
    }
  } catch (err) {
    res.status(500).json({ success: false, error: err.message });
  }
});

// 2. 获取登录二维码
app.get('/api/wechat/qrcode', (req, res) => {
  if (qrCodeUrl) {
    res.json({ success: true, qrcode: qrCodeUrl });
  } else {
    res.json({ success: false, message: '二维码未生成或已失效' });
  }
});

// 3. 发送消息
app.post('/api/wechat/send', async (req, res) => {
  try {
    if (!isLoggedIn) {
      return res.status(401).json({ success: false, message: '未登录' });
    }

    const { type, to, content } = req.body;
    
    // 获取联系人
    const contact = await bot.Contact.find({ name: to });
    if (!contact) {
      return res.status(404).json({ success: false, message: '联系人未找到' });
    }

    // 根据消息类型发送
    switch(type) {
      case 'text':
        await contact.say(content);
        break;
      case 'image':
        const fileBox = FileBox.fromUrl(content);
        await contact.say(fileBox);
        break;
      default:
        return res.status(400).json({ success: false, message: '不支持的消息类型' });
    }

    res.json({ success: true, message: '发送成功' });
  } catch (err) {
    res.status(500).json({ success: false, error: err.message });
  }
});

// 4. 获取登录状态
app.get('/api/wechat/status', (req, res) => {
  res.json({
    success: true,
    isLoggedIn,
    botInitialized: !!bot
  });
});

// 辅助函数:生成二维码图片URL
async function generateQrCode(qrcode) {
  try {
    const url = await qrcode.toDataURL(qrcode);
    return url;
  } catch (err) {
    console.error('生成二维码失败:', err);
    return null;
  }
}

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});